<?php
declare (strict_types=1);

namespace app\index\controller;

use think\facade\Db;
use think\facade\View;

class Lian
{
    public function index()
    {
        //查询
        //Db查询   table全称表名
        //条件查询
        // $list=Db::table('ecm_goods')->where('goods_id','=',1)->find();
        //find主键查询 name前缀去掉
        // $list=Db::name('goods')->find(2);
        //原生查询
        // $list=Db::query("select * from ecm_goods where goods_id=1");
        //->toArray 结果(数据)集转数组 (之后无法使用isEmpty)
        // $list=Db::name('goods')->where('goods_id','=',1)->select()->toArray();
        // echo "<pre>";
        //print_r( $list);
        //echo "</pre>";
        //View::assign('list',$list);

        //Db查询
        //->table(加前缀)/name(不加前缀)  表名 可以直接在表名后面加 别名
        // $list=Db::table('ecm_goods g')->find(1); //空格
        // $list=Db::table(['ecm_goods'=>'g')->find(1); //数组
        // alias  表别名
        //  $list=Db::table('ecm_goods')->alias('g')->find(1);
        // $list=Db::table('ecm_goods')->where('goods_id','=','1')->select();
        //$list->isEmpty()判断是不是空 当数组有值时返回false  没有值时返回true
        // var_dump($list->isEmpty());
        //like 模糊搜索
        //<>不等于
        //in(NOTIN) 包含   between(NOTBETWEEN)在...范围(包含两边) 当数字有多个时范围取前两个数字范围
        //null(NOTNULL)  查出条件字段为空的所有数组
        //$list=Db::table('ecm_goods')->where('close_reason',null)->select();
        //EXP 表达式查询，支持SQL语法
        //$list=Db::table('ecm_goods')->where('goods_id','EXP',"=2")->select();
        //where(字段,表达式,值) 和条件  whereor 或条件
//       if (!$list->isEmpty()){
//           echo "<pre>";
//           print_r($list->toArray());
//           echo "</pre>";
//           // return  View::assign('list',$list);
//       }else{
//
//           return "空";
        //啦啦啦啦啦
//
//       }


        //field*
        //1.能查指定的字段,用逗号隔开,在一个引号之间,字符串形式
        //2.通过as可以给字段起别名
        //3.可以通过数组形式['字段1','字段2'];
        //4.数组起别名方法['字段'=>'别名']
        //$goods=Db::name('goods')->field(['goods_id','goods_name'=>'name'])->select()->toArray();
        //5.用field(true)查询是显示查询  field(*) 隐式查询
        //$goods=Db::name('goods')->field(true)->select();
        //6.withoutField('字段1,字段2') 删除不需要的字段
        // 也可以通过数组形式 withoutField['字段1','字段2'];
        //$goods=Db::name('goods')->withoutField(['vip','recom'])->select();
        //7.构建一个新字段 当是汉字或字母时需要变成字符串形式" '值' as 新字段 "
        //数组写法['值  as  新字段']
        //$goods=Db::name('goods')->field("'肖战' as name")->select()->toArray();
        //8.多次调用查询
        //$goods=Db::name('goods')->field('goods_id')->field("'肖战' as name")->select()->toArray();
        //9.调用函数      fieldRaw(结果为1条函数时)与field两个不可同时使用
        //调用时间函数 使用格式化方式取出方式  field("FROM_UNIXTIME(时间戳字段,'%Y-%m-%d') as 别名")
        //判断两个值 赋值新参数的时候使用field(if((字段=值),'结果1','结果2') as 别名)
        //$goods=Db::name('goods')->field("FROM_UNIXTIME(add_time,'%Y-%m-%d') as time")->field("if((if_show=1),'上架','下架') as if_show")
        // ->fieldRaw("count(goods_id) as viphe")->select()->toArray();
//        echo "<pre>";
//        print_r( $goods);
//        echo "</pre>";


        //order  排序 (字段  排序方法)  默认asc升序  desc降序
//      $goods=Db::name('goods')
//          ->field('goods_id')
//          ->order('goods_id desc')
//          ->select()->toArray();
        //数组形式order(['字段'=>'排序方法','字段'])
        //多个字段一起排序时,前面字段的优先级大于后面字段  如果前字段一样值,后字段才会根据自己排序顺序排列
        //支持函数排序orderRaw("函数('字段')")
        //$goods=Db::name('goods')
        //->field('goods_id,vip')
        // ->order(['vip'=>'desc','goods_id'])
        //   ->orderRaw("rand('goods_id')")
        // ->select()->toArray();
//         echo "<pre>";
//         print_r( $goods);
//          echo "</pre>";


        //join  连表
        //join('表名 别名','条件')
        //连表方式(inner  left  right full)
        //表名写法: 写法1：[ '完整表名或者子查询'=>'别名' ]
        //写法2：'不带数据表前缀的表名'（自动作为别名）
        //写法3：'不带数据表前缀的表名 别名'
        //注意:不能查询所有字段 避免重复字段
        //         where条件查询中出现重复字段方法:加 表名.查询字段
//       $goods=Db::name('goods')
//           ->alias('g')
//            ->join('gcategory c','g.cate_id=c.cate_id')
//            ->where('g.cate_id','=','19')
//           ->field('g.goods_id,g.cate_id,c.parent_id')->select()->toArray();
//       echo "<pre>";
//       print_r( $goods);
//        echo "</pre>";


        //limit/page  分页限制条数
        //参数:起始位置(从0开始是第一条),条数
        //不传第二个参数时 从第一条数据开始查询指定条数
        // $goods=Db::name('goods')->field('goods_id')->limit(10,10)->select()->toArray();
        //page分页查询 第一参数 页码  第二参数每页几条 (不写第二参数默认每页20条)
        //$goods=Db::name('goods')->field('goods_id')
        //->page(2,5)->select()->toArray();

        //limit与page同时使用(每个只有一个参数)
        //page为页数 limit为每页条数
//       $goods=Db::name('goods')->field('goods_id')->limit(5)
//       ->page(1)->select()->toArray();
//        echo "<pre>";
//        print_r( $goods);
//        echo "</pre>";


        //having/group 筛选/分组
        //having 里面放的表达式
        //分组中spl_mode
//       $goods=Db::name('goods')
//           ->field('goods_id,cate_id,vip,count(goods_id) as num')
//          ->order('num')
//           ->having('num>5')
//           ->group('cate_id')
//           ->limit(3)
//           ->page(2)
//           ->select()->toArray();
//
//       echo "<pre>";
//       print_r($goods);
//       echo "</pre>";


        //时间查询  (时间字段,表达式,比较值)
        //> TIME  大于某个时间  whereTime
        //< TIME  小于某个时间  whereTime
        //>= TIME  大于等于某个时间  whereTime
        //<= TIME  小于等于某个时间  whereTime
        //(not)between(不)在...之间(时间字段,表达式,['前时间','后时间']) whereTime

        //时间区间查询
        //whereBetweenTime('时间字段','开始时间','结束时间')
        //查询某年 whereYear/whereMonth/whereWeek/whereDay(时间字段,'那一年,那一月,那一周,那一天')
        // ---不写第二参数为今年/本月/本周/当天
        //whereBetweenTimeField当前时间是否在两个时间之间 (开始时间字段,结束时间字段)

//       $goods=Db::table('ecm_goods')
//           //->whereTime('add_time','between',['2014-01-01','2015-01-01'])
//          // ->whereTime('add_time','-2 hours') //当前时间-2小时
//           // ->whereBetweenTime('add_time','2014-01-01','2015-01-01')
//           //->whereYear('add_time')
//               ->whereBetweenTimeField('add_time','last_update')
//           ->field("goods_id,FROM_UNIXTIME(add_time,'%Y-%m-%d') as add_time")
//            ->select()->toArray();
//       echo time();
//       echo date("Y-m-d",1516808489);
//       echo date("Y-m-d",1716808961);


        //find in set
        //str  要找到查询的字符串
        //pvalues 字段名  参数以,分隔  如(1,2,6,8)
        //查询字段(pvalues)中包含($str)的结果  返回结果为null或记录
//       $str=4;
//       $goods=Db::table('ecm_goods_prop')
//           ->field(true)->where("pvalues",'find in set', $str)
//           ->select()->toArray();
//       echo "<pre>";
//       print_r($goods);
//       echo "</pre>";


        //多字段相同查询条件   用管道符|分割  可以同时查询两个字段 使用相同的条件
        //where('name|title','like','%香%');


        //闭包查询
//       $kong='';
//       $null=null;
//       $goods=Db::name('goods')
//           ->where('goods_id','=',1)
//           ->where(function ($query) use($kong,$null){
//               $query->whereOr('close_reason','=',$kong)
//                   ->whereOr('close_reason','=',$null);
//           })
//           ->select()->toArray();
//       echo "<pre>";
//       print_r( $goods);
//       echo "</pre>";


        //快捷查询
//whereColumn	比较两个字段 (字段1,表达式,字段2)
//       $goods=Db::name('goods')
//           ->whereColumn('add_time','<','last_update')
//           ->select()->toArray();
//       echo "<pre>";
//       print_r( $goods);
//       echo "</pre>";


        //聚合查询
        //count	统计数量，参数是要统计的字段名（可选） 计算数据总条数
        // $list=Db::name('goods')->count('goods_id');
        //max	获取最大值，参数是要统计的字段名（必须）
        // $list=Db::name('goods')->max('vip');
        //min	获取最小值，参数是要统计的字段名（必须）
        //$list=Db::name('goods')->min('vip');
        //avg	获取平均值，参数是要统计的字段名（必须）
        // $list=Db::name('goods')->avg('vip');
        //sum	获取总分，参数是要统计的字段名（必须）
        // $list=Db::name('goods')->sum('vip');


        //动态查询
        //where(FieldName--字段名)('值')	根据字段查询某个值的数据--查出关于字段值的整条数据  用于and查询
        //$list=Db::name('goods')->whereGoodsName('袋装水果')->select()->toArray();
        // whereOrFieldName	查询某个字段的值   用于or查询
        //可以使用模糊查询等
//       $list=Db::name('goods')
//           ->whereOrGoodsName('袋装水果')
//           ->whereOrGoodsName('like','%杰记%')
//           ->select()->toArray();
        //getBy(FieldName--字段名)	根据某个字段查询
        //相当于查询find只查一条数据
//       $list=Db::name('goods')
//          ->getByGoodsName('袋装水果');
        //getFieldBy(FieldName--字段名)	根据某个字段获取某个值
        //相当于查询value只查一个值
//       $list=Db::name('goods')
//        ->getFieldByGoodsName('袋装水果','vip');


        //子查询  得到一条sql语句
//     $sql=Db::table('ecm_goods')
//         ->field('goods_id,goods_name')
//         ->fetchSql(true)
//         ->select();
        //相当于SELECT `goods_id`,`goods_name` FROM `ecm_goods

//       $sql=Db::table('ecm_goods')
//           ->field('goods_id,goods_name')
//           ->fetchSql(true)
//           ->buildSql();
//       echo "<pre>";
//       print_r(  $sql);
//       echo "</pre>";
        //相当于( SELECT `goods_id`,`goods_name` FROM `ecm_goods` )
        //作为表名
//     $arr=Db::table($sql.' g')
//            ->where('g.goods_id','<',10)
//         ->select()->toArray();


        //使用闭包方式子查询
//       $arr=Db::table('ecm_gcategory')
//           ->where('cate_id','in',function ($query){
//               $query->table('ecm_goods')->distinct(true)->field('cate_id');
//           })->select()->toArray();


//       echo  $cate_count=Db::name('gcategory')->count('cate_id');
//  echo "<pre>";
//  print_r( $arr);
//  echo "</pre>";


        return View::fetch();
    }
    public function demo(){
        echo  '123lalal1';
        return View::fetch();
    }
}